<?php

/**
 * This is the model class for table "uad.sumar".
 *
 * The followings are the available columns in table 'uad.sumar':
 * @property integer $id_persona
 * @property string $estado_envio
 * @property string $transaccion
 * @property string $clavebeneficiario
 * @property integer $id_categoriabeneficiario
 * @property string $indigena
 * @property string $tribu
 * @property string $lengua
 * @property string $tipo_tutor
 * @property string $id_responsable
 * @property string $embarazada
 * @property string $fum
 * @property string $fecha_diagnostico_embarazo
 * @property string $fecha_probable_parto
 * @property string $fecha_efectiva_embarazo
 * @property string $semanas_embarazo
 * @property string $score_riesgo
 * @property integer $cuie_ea
 * @property integer $cuie_ha
 * @property string $vive_conadulto
 * @property string $observaciones
 * @property string $fecha_inscripcion
 * @property string $fecha_carga
 * @property string $fecha_modificacion
 * @property string $activo
 * @property string $discapacidades
 * @property string $usuario_carga
 * @property string $ceb
 * @property string $fecha_ultima_prestacion
 * @property string $codigo_ultima_prestacion
 * @property string $devenga_capita
 * @property string $devenga_cantidad_capita
 * @property string $check_ugsp
 *
 * The followings are the available model relations:
 * @property Smihistoricos[] $smihistoricoses
 * @property CategoriaBeneficiario $idCategoriabeneficiario
 * @property Persona $idPersona
 * @property Efectores $cuieEa
 */
class Sumar extends CActiveRecord
{
    
            //datos para el resposnable
            public $apellidoTutor;
            public $nombreTutor;
            public $tipo_docTutor;
            public $nro_doc_tutor;

            public $fecha_nacimiento;
            public $clase_documento;
            public $nro_documento;
            public $id_tipodoc;

        /* public $motivo;  
            public $campobusqueda;

            public $extra = array();*/
    
    
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'uad.sumar';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('id_persona, estado_envio, transaccion, id_categoriabeneficiario, embarazada, fecha_inscripcion, fecha_carga, fecha_modificacion, activo, ceb', 'required'),
			array('id_persona, id_categoriabeneficiario, cuie_ea, cuie_ha', 'numerical', 'integerOnly'=>true),
			array('estado_envio, transaccion, indigena, embarazada, vive_conadulto, activo, ceb, check_ugsp', 'length', 'max'=>1),			
                        array('tribu, lengua', 'filter', 'filter'=>'trim' ),
                        array('semanas_embarazo', 'length', 'max'=>5),
			array('observaciones, discapacidades, usuario_carga', 'length', 'max'=>255),
			array('codigo_ultima_prestacion', 'length', 'max'=>50),
			array('devenga_capita, devenga_cantidad_capita', 'length', 'max'=>2),
			array('tribu, lengua, tipo_tutor, id_responsable, fum, fecha_diagnostico_embarazo, fecha_probable_parto, fecha_efectiva_embarazo, score_riesgo, fecha_ultima_prestacion', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
                    
                       
		 
                        array('fecha_inscripcion', 'rulesFechaValida'), 
                        array('fecha_inscripcion', 'rulesChequeoInscripcion'),
                        array('embarazada', 'rulesEmbarazo'),                         
                        array('fecha_nacimiento', 'rulesControlGrupoEtareo'),       
			
                        array('id_persona, estado_envio, transaccion, clavebeneficiario, id_categoriabeneficiario, indigena, tribu, lengua, tipo_tutor, id_responsable, embarazada, fum, fecha_diagnostico_embarazo, fecha_probable_parto, fecha_efectiva_embarazo, semanas_embarazo, score_riesgo, cuie_ea, cuie_ha, vive_conadulto, observaciones, fecha_inscripcion, fecha_carga, fecha_modificacion, activo, discapacidades, usuario_carga, ceb, fecha_ultima_prestacion, codigo_ultima_prestacion, devenga_capita, devenga_cantidad_capita, check_ugsp', 'safe', 'on'=>'search'),
		    );
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'SMIHistoricos' => array(self::HAS_MANY, 'Smihistoricos', 'id_afiliado_sumar'),
			'MiCategoriaBeneficiario' => array(self::BELONGS_TO, 'CategoriaBeneficiario', 'id_categoriabeneficiario'),
			'MiPersona' => array(self::BELONGS_TO, 'Persona', 'id_persona'),
			'EfectorAsignado' => array(self::BELONGS_TO, 'Efectores', 'cuie_ea'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id_persona' => 'Id',
			'estado_envio' => 'Estado Envio',
			'transaccion' => 'Transaccion',
			'clavebeneficiario' => 'Clave Beneficiario',
			'id_categoriabeneficiario' => 'Categoria Beneficiario',
			'indigena' => 'Indigena',
			'tribu' => 'Tribu',
			'lengua' => 'Lengua',
			'tipo_tutor' => 'Tipo Tutor',
			'id_responsable' => 'Responsable',
			'embarazada' => 'Embarazada',
			'fum' => 'Fum',
			'fecha_diagnostico_embarazo' => 'Fecha Diagnostico Embarazo',
			'fecha_probable_parto' => 'Fecha Probable Parto',
			'fecha_efectiva_embarazo' => 'Fecha Efectiva Embarazo',
			'semanas_embarazo' => 'Semanas Embarazo',
			'score_riesgo' => 'Score Riesgo',
			'cuie_ea' => 'Cuie Ea',
			'cuie_ha' => 'Cuie Ha',
			'vive_conadulto' => 'Vive Conadulto',
			'observaciones' => 'Observaciones',
			'fecha_inscripcion' => 'Fecha Inscripcion',
			'fecha_carga' => 'Fecha Carga',
			'fecha_modificacion' => 'Fecha Modificacion',
			'activo' => 'Activo',
			'discapacidades' => 'Discapacidades',
			'usuario_carga' => 'Usuario Carga',
			'ceb' => 'Ceb',
			'fecha_ultima_prestacion' => 'Fecha Ultima Prestacion',
			'codigo_ultima_prestacion' => 'Codigo Ultima Prestacion',
			'devenga_capita' => 'Devenga Capita',
			'devenga_cantidad_capita' => 'Devenga Cantidad Capita',
			'check_ugsp' => 'Check Ugsp',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id_persona',$this->id_persona);
		$criteria->compare('estado_envio',$this->estado_envio,true);
		$criteria->compare('transaccion',$this->transaccion,true);
		$criteria->compare('clavebeneficiario',$this->clavebeneficiario,true);
		$criteria->compare('id_categoriabeneficiario',$this->id_categoriabeneficiario);
		$criteria->compare('indigena',$this->indigena,true);
		$criteria->compare('tribu',$this->tribu,true);
		$criteria->compare('lengua',$this->lengua,true);
		$criteria->compare('tipo_tutor',$this->tipo_tutor,true);
		$criteria->compare('id_responsable',$this->id_responsable,true);
		$criteria->compare('embarazada',$this->embarazada,true);
		$criteria->compare('fum',$this->fum,true);
		$criteria->compare('fecha_diagnostico_embarazo',$this->fecha_diagnostico_embarazo,true);
		$criteria->compare('fecha_probable_parto',$this->fecha_probable_parto,true);
		$criteria->compare('fecha_efectiva_embarazo',$this->fecha_efectiva_embarazo,true);
		$criteria->compare('semanas_embarazo',$this->semanas_embarazo,true);
		$criteria->compare('score_riesgo',$this->score_riesgo,true);
		$criteria->compare('cuie_ea',$this->cuie_ea);
		$criteria->compare('cuie_ha',$this->cuie_ha);
		$criteria->compare('vive_conadulto',$this->vive_conadulto,true);
		$criteria->compare('observaciones',$this->observaciones,true);
		$criteria->compare('fecha_inscripcion',$this->fecha_inscripcion,true);
		$criteria->compare('fecha_carga',$this->fecha_carga,true);
		$criteria->compare('fecha_modificacion',$this->fecha_modificacion,true);
		$criteria->compare('activo',$this->activo,true);
		$criteria->compare('discapacidades',$this->discapacidades,true);
		$criteria->compare('usuario_carga',$this->usuario_carga,true);
		$criteria->compare('ceb',$this->ceb,true);
		$criteria->compare('fecha_ultima_prestacion',$this->fecha_ultima_prestacion,true);
		$criteria->compare('codigo_ultima_prestacion',$this->codigo_ultima_prestacion,true);
		$criteria->compare('devenga_capita',$this->devenga_capita,true);
		$criteria->compare('devenga_cantidad_capita',$this->devenga_cantidad_capita,true);
		$criteria->compare('check_ugsp',$this->check_ugsp,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
        public function searchInscripcion($persona)
	{
		// @todo Please modify the following code to remove attributes that should not be searched.
             
		$criteria=new CDbCriteria;                
                $criteria->together = true;
                $criteria->with = array('MiPersona'=>array('alias'=>'p'));
		$criteria->compare('id_persona',$this->id_persona);
		$criteria->compare('estado_envio',$this->estado_envio,true);
		$criteria->compare('CAST(clavebeneficiario as varchar)',$this->clavebeneficiario,true);                
                $criteria->compare('LOWER(p.apellido)',strtolower($persona->apellido),true);
                $criteria->compare('LOWER(p.nombre)',strtolower($persona->nombre),true);
                $criteria->compare('LOWER(p.numero_documento)',strtolower($persona->numero_documento),true);
                $criteria->compare('LOWER(p.sexo)',strtolower($persona->sexo)); 
                $criteria->compare('embarazada',$this->embarazada);
		$criteria->compare('cuie_ea',$this->cuie_ea);	
                $criteria->compare('fecha_inscripcion',$this->fecha_inscripcion,true);
		$criteria->compare('fecha_carga',$this->fecha_carga,true);
		$criteria->compare('fecha_modificacion',$this->fecha_modificacion,true);		
                $criteria->compare('activo',$this->activo);
		$criteria->compare('usuario_carga',$this->usuario_carga,true);
		$criteria->compare('ceb',$this->ceb);
		
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

        
        
	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return Sumar the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
        
        /********************************************************************/
        
       /* 
        * Retorna un valor logico segun la comparacion del primer parametero con respecto al segundo.
        * 
        * Devuelve un valor logico Verdadero en el caso de que las fechas parametrizadas, el segundo
        * parametro sea mayor que el primero.
        * Se parametrizan en formatio dd-mm-yyyy.
        * 
        */    
        /* OK - OK - OK */
        public  static  function fechaMenorMayor($fechaMenor,$fechaMayor){
             $fechaMayor = explode('-',$fechaMayor); 
             $fechaMenor = explode('-',$fechaMenor); 
        
             $diaMayor = $fechaMayor[0];
             $mesMayor = $fechaMayor[1];
             $anioMayor = $fechaMayor[2];
             $diaMenor = $fechaMenor[0];
             $mesMenor = $fechaMenor[1];
             $anioMenor = $fechaMenor[2];
             
             if ( ($anioMayor > $anioMenor) || (($anioMayor == $anioMenor) && ($mesMayor > $mesMenor))
                 || (($anioMayor == $anioMenor) && ($mesMayor == $mesMenor) && ($diaMayor > $diaMenor)) )
                    return true;
             else
                    return false;
             
        } // FIN function fechaMenorMayor
        
          //Convierte una fecha en formaro yyyy-mm-dd  a dd-mm-yyyy, o viceversa
          /* OK - OK - OK */
        public static function convertirFormatoFecha($fecha){
            $fecha = explode('-',$fecha);
            $fecha = $fecha[2] ."-".$fecha[1]."-".$fecha[0];
            return $fecha;
        } // FIN function convertirFormatoFecha
        
         protected function afterFind(){
            $this->fum= Sumar::convertirFormatoFecha($this->fum); 
            $this->fecha_probable_parto= Sumar::convertirFormatoFecha($this->fecha_probable_parto); 
            $this->fecha_diagnostico_embarazo= Sumar::convertirFormatoFecha($this->fecha_diagnostico_embarazo); 
            $this->fecha_efectiva_embarazo =  Sumar::convertirFormatoFecha($this->fecha_efectiva_embarazo);  
            $this->fecha_ultima_prestacion =  Sumar::convertirFormatoFecha($this->fecha_ultima_prestacion); 
            $this->fecha_carga= Sumar::convertirFormatoFecha($this->fecha_carga);
            $this->fecha_inscripcion= Sumar::convertirFormatoFecha($this->fecha_inscripcion);
            $this->fecha_modificacion =  Sumar::convertirFormatoFecha($this->fecha_modificacion);               

            parent::afterFind();
            return TRUE;
        } // FIn afterFind
        
         protected function beforeSave(){
            if (empty($this->fum)) $this->fum = "30-12-1899";
            if (empty($this->fecha_efectiva_embarazo)) $this->fecha_efectiva_embarazo = "30-12-1899";
            if (empty($this->fecha_probable_parto)) $this->fecha_probable_parto = "30-12-1899";
            if (empty($this->fecha_diagnostico_embarazo)) $this->fecha_diagnostico_embarazo ="30-12-1899";
          
                 
            $this->fum= Sumar::convertirFormatoFecha($this->fum); 
            $this->fecha_probable_parto= Sumar::convertirFormatoFecha($this->fecha_probable_parto); 
            $this->fecha_diagnostico_embarazo= Sumar::convertirFormatoFecha($this->fecha_diagnostico_embarazo); 
            $this->fecha_efectiva_embarazo =  Sumar::convertirFormatoFecha($this->fecha_efectiva_embarazo);  
            $this->fecha_ultima_prestacion =  Sumar::convertirFormatoFecha($this->fecha_ultima_prestacion); 
            $this->fecha_carga= Sumar::convertirFormatoFecha($this->fecha_carga);
            $this->fecha_inscripcion= Sumar::convertirFormatoFecha($this->fecha_inscripcion);
            $this->fecha_modificacion =  Sumar::convertirFormatoFecha($this->fecha_modificacion);           

         
            parent::beforeSave();
            return true;
            
         }// Fin before Find
         
        /*
         * Regla de validacion para validar formato y dia de fechas.
         * 
         * Se verifica por un lado que la misma posea formato especifico de dd-mm-yyyy; y ademas que 
         * la misma sea una fecha correcta del calendario.         
         */
         
        /* OK - OK - OK */
        public function rulesFechaValida($attribute,$params){
            if (!empty($this->$attribute)){                      
                $fecha = explode("-",$this->$attribute); 
                $fecha_dia = (int)$fecha[0];
                $fecha_mes = (int)$fecha[1];
                $fecha_anio = (int)$fecha[2];
             
                $atributos = $this->attributeLabels();
             
                
                
                if (($fecha_mes < 1 || $fecha_mes > 12) )
                        $this->addError($attribute,'ERROR!!! Fecha Invalida.   La fecha tiene un formato invalido o no es correcta.'); 
                else if ($fecha_dia < 1 || $fecha_dia > 31)
                                $this->addError($attribute,'ERROR!!! Fecha Invalida.   La fecha tiene un formato invalido o no es correcta.'); 
                else if (($fecha_mes==4 || $fecha_mes==6 || $fecha_mes==9 || $fecha_mes==11) && $fecha_dia >= 31)
                            $this->addError($attribute, 'ERROR!!! Fecha Invalida.    La fecha tiene un formato invalido o no es correcta.'); 
                else if ($fecha_mes == 2)
                {
                    $biciesto = ($fecha_anio % 4 == 0 && ($fecha_anio % 100 != 0 || $fecha_anio % 400 == 0));
                    if ($fecha_dia> 29 || ($fecha_dia == 29 && !$biciesto))
                        $this->addError($attribute,'ERROR!!! Fecha Invalida.   La fecha tiene un formato invalido o no es correcta.'); 
                }            
         }                    
       } //Fin rulesfechaValida.
       
        /*
         * Regla de validacion para comprobar que los datos ingresados de embarazo sean los correctos.
         * 
         * Valida que las fecha de diagnostico de embrazo, la fum y la probable de parto sean validas y cumplan
         * las condiciones de respetar que unas sean menores y mayores que otras.
         * 
         */  
       
       
        public function rulesEmbarazo($attribute,$params)
        {
          if ((($this->embarazada=='1') || ($this->embarazada==1)))
          { 
               $fechaActual = date('d-m-Y');
               $semanas  =  $this->semanas_embarazo;
            
            if (empty($this->semanas_embarazo))
               $this->addError('semanas_embarazo','Error!!. Debe completar las Semanas de Embarazo !!!'); 
            
            if (!preg_match("/^\d{1,2}(\.\d{1})?$/", $this->semanas_embarazo))
               $this->addError('semanas_embarazo','Error!!. Las Semanas de Embarazo deben estar en formato similar a X  o XX.X donde x es un digito de 0 a 9'); 
                    
            if (($this->semanas_embarazo<1) || ($this->semanas_embarazo>42))
              $this->addError('semanas_embarazo','Error!!. Verifique las Semanas de Embarazo; nro entre 1..42 semanas !!!'); 
            
            if (empty($this->fum))
              $this->addError('fum','Error!!. Debe completar la FUM!!!');
            else   
                Sumar::model()->rulesFechaValida($this->fum,$params);
            
            if (empty($this->fecha_diagnostico_embarazo))
              $this->addError('fecha_diagnostico_embarazo','Error!!. Debe completar la fecha de Diagnostico de Embarazo!!!');
            else
               Sumar::model()->rulesFechaValida($this->fecha_diagnostico_embarazo,$params);
            
            if (empty($this->fecha_probable_parto))
              $this->addError('fecha_probable_parto','Error!!. Debe completar la fecha Probable de Parto!!!'); 
           else
               Sumar::model()->rulesFechaValida($this->fecha_probable_parto,$params); 
             
            if ((!empty($this->fecha_diagnostico_embarazo)) && (!empty($this->fecha_probable_parto)))
            {
                list($diaDiag,$mesDiag,$anioDiag) = explode("-",$this->fecha_diagnostico_embarazo);
                list($diaProPar,$mesProPar,$anioProPar) = explode("-",$this->fecha_probable_parto);
  
                if ( ($anioDiag > $anioProPar) || 
                     (($anioDiag == $anioProPar) && ($mesDiag>$mesProPar)) ||
                     (($anioDiag == $anioProPar) && ($mesDiag==$mesProPar) && ($diaDiag>$diaProPar)) ){
                        $this->addError('fecha_probable_parto','Error!!. La Fecha Probable de Parto debe ser Mayor que la Fecha de Diagnostico de Embarazo!!!'); 
                     
                }  
                
                if (!empty($this->fum))
                {
                   list($diaFUM,$mesFUM,$anioFUM) = explode("-",$this->fum);
                   
                    if ( ($anioDiag < $anioFUM) || 
                     (($anioDiag == $anioFUM) && ($mesDiag < $mesFUM)) ||
                     (($anioDiag == $anioFUM) && ($mesDiag==$mesFUM) && ($diaDiag<$diaFUM)) ){
                        $this->addError('fum','Error!!. La FUM debe ser Menor que la Fecha de Diagnostico de Embarazo!!!'); 
                    }                     
                }//del no empty FUM   
         
              
                
                if ( (!empty($this->fecha_inscripcion)) && ($this->isNewRecord) )
                {
                   list($diaINS,$mesINS,$anioINS) = explode("-",$this->fecha_inscripcion);
                   
                    if ( ($anioDiag > $anioINS) || 
                     (($anioDiag == $anioINS) && ($mesDiag > $mesINS)) ||
                     (($anioDiag == $anioINS) && ($mesDiag==$mesINS) && ($diaDiag > $diaINS)) ){
                        $this->addError('fecha_diagnostico_embarazo','Error!!. La Fecha de Diagnostico de embarazo debe ser MENOR que la Fecha Inscripcion!!!'); 
                    }                     
                } 
                
                
               if (empty($this->fecha_nacimiento))
                 $this->addError('fecha_nacimiento','Error!!. Ingrese la fecha de Nacimiento!!!');
               else{
                    if (Sumar::fechaMenorMayor($this->fecha_diagnostico_embarazo, $this->fecha_nacimiento)){
                           $this->addError('fecha_diagnostico_embarazo','Error!!. La Fecha de Diagnostico debe ser mayor a la fecha de Nacimiento del Beneficiario!!!'); 
                     }             
                    if (Sumar::fechaMenorMayor($this->fecha_probable_parto, $this->fecha_nacimiento  )){
                           $this->addError('fecha_probable_parto','Error!!. La Fecha Probable de Parto debe ser mayor a la fecha de Nacimiento del Beneficiario!!!'); 
                    }
                    if (!empty($this->fum)){
                        if (Sumar::fechaMenorMayor($this->fum, $this->fecha_nacimiento)){
                                $this->addError('fum','Error!!. La FUM  debe ser mayor a la fecha de Nacimiento del Beneficiario!!!'); 
                        }
                        if (Sumar::fechaMenorMayor($fechaActual, $this->fum  )){
                           $this->addError('fum','Error!!. La FUM  debe ser menor a la fecha de Actual !!!'); 
                    }
                    }
                    if (Sumar::fechaMenorMayor($fechaActual, $this->fecha_diagnostico_embarazo  )){
                           $this->addError('fecha_diagnostico_embarazo','Error!!. La Fecha Diagnostico de Embarazo debe ser menor a la fecha de Actual !!!'); 
                    }
                    
                    
              }
           }   // FIN DEL no emty FECHA DIAGNOSTICO Y FECHA PROBABLE
           
        } 
      } // FIN DEL RulesEmbarazo 
      
      
       public function rulesChequeoInscripcion($attribute,$params){
          if (!empty($this->$attribute)){
            $fechaActual = date('d-m-Y');
            
            if (Sumar::fechaMenorMayor($fechaActual, $this->fecha_inscripcion )){
                    $this->addError('fecha_inscripcion','Error!!. La Fecha de Inscripcion debe der Menor/Igual a la Fecha Actual !!!'); 
            }
            if (Sumar::fechaMenorMayor($fechaActual, $this->fecha_nacimiento  )){
                    $this->addError('fecha_nacimiento','Error!!. La Fecha de Nacimiento debe ser Menor/Igual a la Fecha Actual !!!'); 
            } 
            if (Sumar::fechaMenorMayor($this->fecha_inscripcion, $this->fecha_nacimiento  )){
                    $this->addError('fecha_inscripcion','Error!!. La Fecha de Inscripcion debe ser menor / igual a la Fecha de Nacimiento !!!'); 
            } 
         }              
        }   
        
        
        
         /*
         * Regla de validacion que aplica los controles necesarios segun la edad calculada al Beneficiario.
         * 
         * Para ciertas edades existen reglas a aplicar para permitir o no la inscripcion,
         * 
         * La Regla se basa en calcular la edad del beneficiario, una vez calculada, segun la edad;
         * comienza a validar las reglas y las condiciones que tiene que cumplir.
         * 
         * Si el beneficiario es menor debe pedir los datos del Responsable. 
         * Si es menor unicamente al año de edad, permite cargar con documento ajeno; y si esto se alpica;
         * los documentos de este y el responsable deben ser los mismos.
         * 
         * En el caso de que sea la edad entre los 20  y 64 años, solo debe permitir inscribir a mujeres.
         * 
         * Ademas verifica si la edad del beneficiario es un menor  (a 10 años), comprueba que los datos del responsable sean validos
         */ 
     
        public function rulesControlGrupoEtareo($attribute,$params)
        {
            $sexo = $this->sexo;
            
            //obtenemos la edad del beneficiario, y vemos los posibles erores que puedan llegar a tener
            if (!empty($this->fecha_nacimiento)){
                
                $fechaNacimiento = $this->fecha_nacimiento;
                
                list($diaNac, $mesNac, $anioNac) = explode("-",$fechaNacimiento);
                
                $anioHoy = date("Y");
                $mesHoy = date("m");
                $diaHoy = date("d");
                $edad = $anioHoy - $anioNac;

                if ($mesHoy <    $mesNac)
                    $edad = $edad - 1;
                else
                if (($mesHoy == $mesNac) && ($diaHoy < $diaNac))
                    $edad = $edad - 1; 
                
                $clases = $this->clase_documento; 
                
                 //validacion documento ajeno
                if (($edad >= 1) && ($this->clase_documento == 'A') )
                    $this->addError('clase_documento','Error!! Solo se permite inscripcion con clase de Documentos ajenos menores al año de edad .'); 
               
                  //validacion solo mujeres mayores entre 20 y 65 años de edad
                if ((($edad > 24) && ($edad < 65)) && (($sexo == 'M') || ($sexo=='m')))
                    $this->addError('fecha_nacimiento','Error!! La inscripcion para Beneficiarios Maculinos esta habilitada hasta los 24 Años de Edad.'); 
            
                if  ($edad > 64) 
                {   
                    $this->addError('fecha_nacimiento','Error!! La Inscripcion solo esta habilitada para beneficiarios que cumplan la edad hasta los 64 años.'); 
                }
                /*
               if (($edad<10) && ( ($this->tipo_docTutor==0) || ($this->tipo_docTutor=='0') ) ) 
                    $this->addError('tipo_docTutor','Error!! Complete el campo Nro de Documento del Responsable.');
                if (($edad<10) && (empty($this->nro_doc_tutor))) 
                    $this->addError('nro_doc_tutor','Error!! Complete el campo Nro de Documento del Responsable.');
                if (($edad<10) && ((empty($this->apellidoTutor))))            
                    $this->addError('apellidoTutor','Error!! Complete el campo Apellido del Responsable.');
                if (($edad<10) && ((empty($this->nombreTutor))))
                    $this->addError('nombreTutor','Error!! Complete el campo Nombre del Responsable.');
                if (($edad<1) && ($this->clase_documento=='A') && (!(($this->nro_documento == $this->nro_doc_tutor) && ($this->id_tipodoc == $this->tipo_docTutor))))
                    $this->addError('nro_doc_tutor','Error!! La Inscripcion con Documentos Ajenos requieren que los documentos del beneficiario y del responsable sean los mmismos.');
          */ } 
        } //fin del RulesEdades_x_GrupoEtareo
        
        
        
        
        
     
        
        
        
         /*
          * Regla que chequea y valida los campos del responsable que sean ingresados correctamente.
          * 
          * La primer validacion se basa en ver que el documento ingresado sea el correcto, es decir que sea valido segun
          * su tipo y clase.
          * 
          * La segunda comprobacion que realiza en en base a si es un documento del beneficiario inscripto con documento ajeno,
          * que este pueda ser inscripto unicamente si tiene docuemnto y tipo igual a su responsable.
          * 
          */
      
        public function rulesDniValidoResponsable($attribute,$params)
        {
          if (!empty($this->fecha_nacimiento)){
            //obtenemos la edad del beneficiario 
            $fechaNacimiento = $this->fecha_nacimiento;
            
            list($diaNac,$mesNac,$anioNac) = explode("-",$fechaNacimiento);

            //calculamos la edad
             $anioHoy = date("Y");
             $mesHoy = date("m");
             $diaHoy = date("d");

             $edad = $anioHoy - $anioNac;

             if ($mesHoy <    $mesNac)
                $edad = $edad - 1;
             else
             if (($mesHoy == $mesNac) && ($diaHoy < $diaNac))
                $edad = $edad - 1; 
             
          //si la edad del beneficiario es menor  a los  10 años verifico los documentos del responsable   
          if ($edad<10)
          {
           $tipoDocumentoResponsable = $this->tipo_docTutor;
           $documentoResponsable = $this->nro_doc_tutor;
           
            if($this->tipo_tutor == '0')
               $this->addError('tipo_tutor','Seleccione el Responsable del Menor.'); 
            else 
            {
               if(empty($this->nro_doc_tutor))
                  $this->addError('nro_doc_tutor','Error!! Complete el Numero de Documento del tutor.');
               if(empty($this->tipo_docTutor))
                  $this->addError('nro_doc_tutor','Error!! Complete el Tipo de Documento del tutor.'); 
               
                 if ((!empty($this->nro_doc_tutor)) && (!empty($this->tipo_docTutor))){
                   if ( (($tipoDocumentoResponsable=='1') || ($tipoDocumentoResponsable==1)) &&
                    (($documentoResponsable<5000000) || ($documentoResponsable>99999999)) || (!is_numeric($documentoResponsable)) )
                        $this->addError('nro_doc_tutor','Error!! LOS DNI solo permiten valores entre 50000 y 99999999 .'); 
                   if ( ( ($this->nro_doc_tutor != $this->numero_documento) || ($this->tipo_docTutor != $this->id_tipodocumento)) && ($this->clase_documento=='A'))
                       $this->addError('nro_doc_tutor','Error!! Los Dodumentos del responsable y del beneficiario deben ser iguales.'); 
            }
          }          
          }
         }//fin del if !empty fecha nacimiento
        } // fin del RULESDNIValidoresponsble
        
        
       /*
        * NOS VALIDA QUE EL COMBO ESTE SELECCIONADA ALGUNA OPCION VALIDA; POR
        * DEFECTO EL VALRO ES -1; SI VIEBE ESTE VALOR NOSE SELEDCCIOPNMO NINGUNO 
        */
        /* OK - OK - OK */ 
       public function  rulesSeleccionOK($attribute,$params) {
          
         if  ((($r == '-1') || ($this->$attribute == -1)) ||
             (($this->$attribute == '0') || ($this->$attribute == 0))){
                 $this->addError($attribute ,'Seleccione una opcion valida!!!');}
                 
        }       
       
       
        
        
        /*******************************************************/
        /*******************************************************/
        
       
        public function getConCEB(){
            $ceb = $this->ceb;           
            if ( ($this->ceb==1) || ($this->ceb=='1') )
            {   $fechaUltimaPrestacion = $this->fecha_ultima_prestacion;            
                list($dia,$mes,$anio) =  explode("-",$fechaUltimaPrestacion);
                $fechaUltimaPrestacion = $anio . "-" . $mes  . "-" . $dia;              
               
                $fechaUltimaPrestacion = new DateTime($fechaUltimaPrestacion);
                $fechaUltimaPrestacion->add(new DateInterval('P8M'));
                
               
               return "SI / ". $fechaUltimaPrestacion->format('d-m-Y');
            }   
            else{              
              if (($this->estado_envio=='n') && ($this->transaccion == 'A') && ($this->fecha_ultima_prestacion == '30-12-1899'))
              {
                $fechaUltimaPrestacion = $this->fecha_inscripcion;            
                list($dia,$mes,$anio) =  explode("-",$fechaUltimaPrestacion);
                $fechaUltimaPrestacion = $anio . "-" . $mes  . "-" . $dia;             
               
                $fechaUltimaPrestacion = new DateTime($fechaUltimaPrestacion);
                $fechaUltimaPrestacion->add(new DateInterval('P8M'));
                               
                return "SI / ". $fechaUltimaPrestacion->format('d-m-Y');
              }else
                  return "NO";
            }  
        }
        
        
        public function getEmbarazada(){
            if ( ($this->embarazada==1) || ($this->embarazada=='1'))
              return "SI";
            else
              return "NO";  
        }
        
         public function getEfectorCUIE()
        {$d = $this->cuie_ea;
          $efector = Efectores::model()->findByPk($this->cuie_ea);
          return $efector->cuie . " " . $efector->nombre;
        }
        
        public function getSexo()
        {
            if (($this->sexo == 'M') || ($this->sexo == 'm'))
                return 'MASCULINO';
            else
                return 'FEMENINO';
        }   
        
        
        /*  OK  */
        /* Retorna valor Logico en caso de que las dos fechas enviadas haya una diferencia entre la 
         * canTDias parametrizadas  */
        /*public function esNeonato($fechaNacimiento=null, $fechaActual=null,$cantDias=0){
           $dias	= (strtotime($fechaNacimiento) - strtotime($fechaActual))/86400;
	   $dias 	= abs($dias); 
           $dias = floor($dias);	
           if ($dias < $cantDias)
	       return true;
           else
               return false;
       }*/
       
       
        
     public  function DevolverGrupoEtareo($fechaMenor=null,$fechaMayor=null){
        if (empty($fechaMenor)){
          $fechaMenor = $this->MiPersona->fecha_nacimiento;  
        }
        if (empty($fechaMayor)){
          $fechaMayor = date('d-m-Y');  
        }
        
            
         $fechaNacimiento = $fechaMenor;         
         $hoy = $fechaMayor; 
         
         $esNeonato = Persona::model()->esNeonato($fechaNacimiento, $hoy, 45);
         if ($esNeonato == TRUE)
             return 'NEONATO';
         else{
           $edad = Persona::model()->calcularEdad($fechaNacimiento,$hoy);
           $anios = $edad['anios'];
           
           $criteria = new CDbCriteria; 
           $criteria->condition = "(rango_anios_inicio <= '" . $anios ."' and rango_anios_fin > '" . $anios ."')";
           $criteria->order = 'id'; 
            
           $grp_patologico = GrupoPatologico::model()->find($criteria); 
           $grupoEtareo = $grp_patologico->descripcion;
            
            return $grupoEtareo; 
        }   
       
      }// fin del DevolverGrupoEtareoActual
      
      
       public  function DevolverGrupoEtareoID($fechaMenor,$fechaMayor){ 
         if (empty($fechaMenor)){
          $fechaMenor = Sumar::convertirFormatoFecha($this->fecha_nacimiento);  
        }
        if (empty($fechaMayor)){
          $fechaMayor = date('Y-m-d');  
        }
        
            
         $fechaNacimiento = $fechaMenor;         
         $hoy = $fechaMayor; 
         
         $esNeonato = Persona::model()->esNeonato($fechaNacimiento, $hoy, 45);
         if ($esNeonato == TRUE)
             return 'NEONATO';
         else{
           $edad = Persona::model()->calcularEdad($fechaNacimiento,$hoy);
           $anios = $edad['anios'];
           
           $criteria = new CDbCriteria; 
           $criteria->condition = "(rango_anios_inicio <= '" . $anios ."' and rango_anios_fin > '" . $anios ."')";
           $criteria->order = 'id'; 
            
           $grp_patologico = GrupoPatologico::model()->find($criteria); 
           $grupoEtareo = $grp_patologico->id;
            
            return $grupoEtareo; 
        }   
       
          
      }// fin del DevolverGrupoEtareoActual
      
      
}
